free() এর মাধ্যমে মেমোরি মুক্ত করা

Computer Programming - সি স্ট্যান্ডার্ড লাইব্রেরি রেফারেন্স (C Standard Library Reference) Memory Management Functions (মেমোরি ম্যানেজমেন্ট ফাংশনস) |
196
196

free() ফাংশন: মেমোরি মুক্ত করা

সি প্রোগ্রামিং ভাষায় free() ফাংশনটি ডাইনামিক মেমোরি বরাদ্দকৃত মেমোরি ব্লক মুক্ত করার জন্য ব্যবহৃত হয়। যখন আপনি malloc(), calloc(), অথবা realloc() এর মাধ্যমে মেমোরি বরাদ্দ করেন, তখন সেই মেমোরি ব্লকটি ব্যবহারের পর free() ফাংশন ব্যবহার করে সেটি মুক্ত করা উচিত। এটি মেমোরির অপচয় প্রতিরোধ করতে সাহায্য করে এবং সিস্টেমের রিসোর্স পরিচালনাকে উন্নত করে।

সিঙ্কট্যাক্স:

void free(void *ptr);
  • ptr: এটি সেই পয়েন্টার, যার মাধ্যমে আপনি ডাইনামিক মেমোরি বরাদ্দ করেছিলেন। মেমোরি মুক্ত করতে সেই পয়েন্টারটি free() ফাংশনে পাঠানো হয়।

free() ফাংশনের কাজ:

  • free() ফাংশনটি কোনো ডাইনামিক মেমোরি ব্লককে মুক্ত করে দেয়, যা পূর্বে malloc(), calloc(), বা realloc() ফাংশনের মাধ্যমে বরাদ্দ করা হয়েছিল।
  • এটি বরাদ্দকৃত মেমোরি অঞ্চলটি পুনরায় অপারেটিং সিস্টেমের জন্য উপলব্ধ করে দেয়।

বিঃদ্রঃ: মেমোরি মুক্ত করার পর, পয়েন্টারটি NULL করে দেওয়া ভালো অভ্যাস, কারণ এটি একটি অবৈধ মেমোরি অ্যাক্সেসকে প্রতিরোধ করে।

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr;
    
    // ডাইনামিক মেমোরি বরাদ্দ করা
    ptr = (int *)malloc(5 * sizeof(int));  // 5টি ইন্টিজারের জন্য মেমোরি বরাদ্দ
    
    if (ptr == NULL) {
        printf("Memory allocation failed\n");
        return 1;  // মেমোরি বরাদ্দ ব্যর্থ হলে প্রোগ্রাম শেষ
    }
    
    // ডাইনামিক মেমোরির মধ্যে কিছু মান সন্নিবেশ করা
    for (int i = 0; i < 5; i++) {
        ptr[i] = i + 1;
    }
    
    // ডাইনামিক মেমোরি ব্যবহার করা
    printf("Allocated memory contents:\n");
    for (int i = 0; i < 5; i++) {
        printf("%d ", ptr[i]);
    }
    printf("\n");
    
    // মেমোরি মুক্ত করা
    free(ptr);
    ptr = NULL;  // মেমোরি মুক্ত করার পর পয়েন্টারটি NULL করা ভালো

    return 0;
}

ব্যাখ্যা:

  1. malloc() ফাংশনটি ৫টি ইন্টিজারের জন্য মেমোরি বরাদ্দ করে। এটি একটি পয়েন্টার ptr ফিরিয়ে দেয়।
  2. মেমোরির মধ্যে কিছু মান সন্নিবেশ করা হয়েছে।
  3. free() ফাংশনটি মেমোরি ব্লকটি মুক্ত করে দেয়, যা malloc() ফাংশনের মাধ্যমে বরাদ্দ করা হয়েছিল।
  4. মেমোরি মুক্ত করার পর ptr = NULL; করা হয়েছে, কারণ এটি পয়েন্টারকে একটি অবৈধ অবস্থায় (ডাঙ্গারাস পয়েন্টার) পৌঁছাতে দেয় না এবং ভবিষ্যতে পয়েন্টারটির ভুল ব্যবহার প্রতিরোধ করে।

গুরুত্বপূর্ণ বিষয়:

  • ডাইনামিক মেমোরি বরাদ্দের পর, প্রতিটি malloc() বা calloc() এর জন্য একবার free() ব্যবহার করা উচিত। যদি মেমোরি মুক্ত না করা হয়, তবে এটি মেমোরি লিক সৃষ্টি করতে পারে, যেখানে মেমোরি ব্যবহৃত হলেও মুক্ত হয় না, যা শেষ পর্যন্ত সিস্টেমের মেমোরি কমিয়ে দিতে পারে এবং প্রোগ্রামটি স্লো হতে পারে।
  • free() এর মাধ্যমে মুক্ত করার পর, সেই পয়েন্টারটি NULL করা উচিত, কারণ পরবর্তীতে সেই পয়েন্টারটি আবার ব্যবহৃত হলে এটি অবৈধ মেমোরি অ্যাক্সেস প্রতিরোধ করে।
  • মেমোরি দ্বিতীয়বার free() করা উচিত নয়, কারণ এটি প্রোগ্রামে ক্র্যাশ বা অন্য সমস্যা সৃষ্টি করতে পারে।

সারসংক্ষেপ:

  • free() ফাংশনটি ডাইনামিকভাবে বরাদ্দকৃত মেমোরি ব্লকগুলো মুক্ত করতে ব্যবহৃত হয়।
  • মেমোরি ব্যবস্থাপনার জন্য, malloc(), calloc(), বা realloc() ব্যবহারের পরে free() ব্যবহার করা অপরিহার্য।
  • মেমোরি মুক্ত করার পর পয়েন্টারটি NULL করা ভালো অভ্যাস, যাতে অবৈধ অ্যাক্সেস প্রতিরোধ করা যায়।
common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion